package org.maodian.shindigbook.social.facebook.model;

/**
 * Stands for an User object in <a
 * href="http://developers.facebook.com/docs/reference/api/">Facebook Graph
 * API</a>. See <a
 * href="http://developers.facebook.com/docs/reference/api/user">Facebook
 * User</a>.
 * 
 * @author Pigwen
 * 
 */
public interface User {

  /**
   * The fields that represent the User object in json form.
   * 
   * @author Pigwen
   * 
   */
  public static enum Field {
    ID("id"),
    FIRST_NAME("first_name"),
    LAST_NAME("last_name"),
    NAME("name"),
    LINK("link"),
    ABOUT("about"),
    BIRTHDAY("birthday"),
    WORK("work"),
    EDUCATION("education"),
    EMAIL("email"),
    WEBSITE("website"),
    HOMETOWN("hometown"),
    LOCATION("location"),
    BIO("bio"),
    QUOTES("quotes"),
    GENDER("gender"),
    INTERESTED_IN("interested_in"),
    MEETING_FOR("meeting_for"),
    RELATIONSHIP_STATUS("relationship_status"),
    RELIGION("religion"),
    POLITICAL("political"),
    VERIFIED("verified"),
    SIGNIFICANT_OTHER("significant_other"),
    TIMEZONE("timezone");
    
    /**
     * The json field that the instance represents.
     */
    private final String jsonString;

    /**
     * create a field base on the a json element.
     *
     * @param jsonString the name of the element
     */
    private Field(String jsonString) {
      this.jsonString = jsonString;
    }

    /**
     * emit the field as a json element.
     *
     * @return the field name
     */
    @Override
    public String toString() {
      return this.jsonString;
    }
  }
}
